/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package progweb.project.Servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.ListIterator;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import progweb.project.Manager.DBManager;
import progweb.project.Manager.GUIManager;
import progweb.project.Manager.Medico;
import progweb.project.Manager.Paziente;
import progweb.project.Manager.Richiamo;
import org.apache.log4j.*;

/**
 * Servlet che visualizza i dati di un paziente, comprendenti di foto, nome, cognome, data di nascita
 * e la lista dei richiami
 * @author Valentino Briani
 */
public class MedicoSchedaPazienteSL extends HttpServlet {
    private static org.apache.log4j.Logger log = Logger.getLogger(MedicoSchedaPazienteSL.class);
    HttpSession sessione;
    Medico m;
    String type;
    String lastaccess;
    Paziente p;
    GUIManager guimanager;
    
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //Recupero dei dati dalla sessione
        log.info("Recupero attributi dalla sessione");
        this.sessione=request.getSession();
        this.m=(Medico)this.sessione.getAttribute("user");
        this.type=(String)this.sessione.getAttribute("type");
        this.lastaccess=(String)this.sessione.getAttribute("lastaccess");
        this.guimanager=(GUIManager)this.sessione.getAttribute("guimanager");
        
        //Controllo dei dati della sessione
        log.info("Controllo degli attributi");
        if(this.m==null || this.guimanager==null || this.type.equals("paziente")){
            log.warn("Sessione inesistente o sceduta");
            request.setAttribute("error", "Sessione inesistente o scaduta.");
            request.setAttribute("page", "index.html");
            request.getSession().invalidate();
            RequestDispatcher rd=request.getRequestDispatcher("/ErrorServlet");
            rd.forward(request, response);
        }
        
        //Recupero del paziente dal DB
        log.info("Recupero del paziente dal DB");
        int id=Integer.decode(request.getParameter("id"));
        log.debug("id paziente = "+id);
        p=DBManager.getPazienteFromId(id);
        log.debug("paziente = "+p.getNomeCognome());
        
        //Preparazione delle stringhe per la stampa
        log.info("Creazione stringhe per la stampa della pagina");
        String titolo="> Visualizzazione Vaccinazioni > Scheda Paziente: "+p.getNomeCognome();
        String menu="";
        //Contenuto
        String contenuto=
                "<div id=\"dettaglioPaziente\">\n"
                + "<img src=\""+p.getFoto()+"\" /><br /><br />\n"
                + "<h5>Nome:</h5><p>"+p.getNome()+"</p><br />\n"
                + "<h5>Cognome:</h5><p>"+p.getCognome()+"</p><br />\n"
                + "<h5>Data di nascita:</h5><p>"+p.getAnnoDiNascita()+"</p><br><br>\n"
                + "<h5>Richiami:</h5>\n";
        //Aggiunta dei richiami a contenuto
        log.info("Recupero dei richiami");
        ArrayList<Richiamo> richiami=DBManager.getRichiamiFromIdPaziente(p);
        if(richiami!=null){
            ListIterator<Richiamo> i=richiami.listIterator();
            Richiamo r;
            while(i.hasNext()){
                r=i.next();
                contenuto+=
                        "\n\t\t<li>"
                        +"\n\t\t\t<h5>Data: </h5><p>"+r.getDataSenzaMs()+"</p>"
                        +"\n\t\t\t<h5>Medico: </h5><p>"+r.getMedico().getNomeCognome()+"</p>"
                        +"\n\t\t</li>";
            }
        }
        
        //Stampa delle stringhe
        log.info("Stampa della pagina");
        this.guimanager.printPage(response.getWriter(), titolo, menu, this.m, lastaccess, contenuto);
        
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
